package pe.com.hermes.hermetic.web.controller.general;

import pe.com.hermes.hermetic.beans.MatrizBean;
import pe.com.hermes.hermetic.beans.PuntoBean;
import pe.com.hermes.hermetic.negocio.service.HermeticFacade;
import pe.com.hermes.hermetic.negocio.ultil.Util;
import pe.com.hermes.hermetic.web.controller.base.IController;
import pe.com.hermes.hermetic.web.forms.SelecCuentaForm;
import pe.com.hermes.hermetic.web.forms.SelecPuntoForm;
import pe.com.hermes.hermetic.web.forms.SelecUnidMoneForm;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.SessionAttributes;

import pe.com.hermes.hermetic.negocio.service.ResponsablesService;
import pe.com.hermes.hermetic.negocio.ultil.ConstantesHermetic;
import pe.com.hermes.hermetic.web.forms.SelecSucursalForm;

@Controller
@RequestMapping("/selecPunto.html")
@SessionAttributes(value={"listPuntos"})
public class SeleccionarPuntoController implements IController{
  protected final static Logger logger = Logger.getLogger(SeleccionarPuntoController.class);
  @Autowired
  private HermeticFacade servicioHermetic;
  @Autowired
  private ResponsablesService responsablesService;
    
    @RequestMapping(method={RequestMethod.GET})    
    protected String showForm(ModelMap model,HttpServletRequest request)throws Exception{
        try {
            logger.info(this.getClass().toString()+" "+"metodo: GET");
            SelecPuntoForm form = new SelecPuntoForm();
            form.setCliente((String)request.getSession(false).getAttribute("cliente"));
            form.setCodSucuHtb((String)request.getSession(false).getAttribute("sucursal"));
            String tipoPunt = request.getParameter("tipoPunt"); 
            //List listSucursales = servicioHermetic.getSucursalesNoTodos();
            List listPuntos = new ArrayList();        
                //listModulos = servicioHermetic.getlistModulos(form.getCliente(),form.getCodSucuHtb(),"");
                String codMatriz = request.getParameter("codMatriz");            
                String[] chksMatrices = (String[])request.getSession(false).getAttribute("chks");
                String listaMatrices = "0";
                form.setCodMatriz("0");
                if(("1").equals(codMatriz)){
                    form.setCodMatriz("1");
                }
                request.getSession(false).setAttribute("codMatriz",form.getCodMatriz());
                request.getSession(false).setAttribute("tipoPunt",tipoPunt);
                if(tipoPunt==null)
                    tipoPunt="0";
                if(("1").equals(codMatriz)){
                    if(chksMatrices==null)
                        chksMatrices = new String[]{"null"};
                    listaMatrices = Util.arrayToString(chksMatrices,",");
                }
            //listPuntos = servicioHermetic.getBovedaByCuentaMoneMulti(form.getCodSucuHtb(), form.getCliente(), arrayCuentas, tipoUnidMone); 
           
                listPuntos = servicioHermetic.buscarPunto("", form.getCliente(), form.getCodSucuHtb(),listaMatrices,tipoPunt); 
                    
            //asigno los valores de las cuentas seleccionadas en session
            String[] chksPunto = (String[])request.getSession(false).getAttribute("chksPunto");
            listPuntos = Util.setChksSession(chksPunto, listPuntos);                
            form.setListPuntos(listPuntos);
            request.getSession(false).setAttribute("listPuntos",listPuntos);
            //model.put("listSucursales",listSucursales);
            form.setTipo("clie_agen");
            model.put("listPuntos",listPuntos);
            model.put(FORM_KEY,form);
            return FORM_SELECT_PUNTO;
        }
        catch (Exception e) {
            logger.error(e);
            return FORM_ERROR_POPUP_VIEW;
        }
    }
    
    @RequestMapping(params={"accion=buscarPunto","desPunto"}) 
    protected String buscarPunto(@RequestParam("desPunto") String desPunto ,ModelMap model,HttpServletRequest request)throws Exception{
                logger.info(this.getClass().toString()+" "+"metodo: GET");
        SelecPuntoForm form = new SelecPuntoForm();
        form.setCliente((String)request.getSession(false).getAttribute("cliente"));        
        form.setCodSucuHtb((String)request.getSession(false).getAttribute("sucursal"));
        String[] chksPunto = (String[])request.getSession(false).getAttribute("chksPunto");
        //List listSucursales = servicioHermetic.getSucursalesNoTodos();
        List listPuntos = new ArrayList();        
        //listModulos = servicioHermetic.getlistModulos(form.getCliente(),codSucuHtb,desMat);
        String[] chksMatrices = (String[])request.getSession(false).getAttribute("chks");
        String listaMatrices = "0";
        form.setCodMatriz((String)request.getSession(false).getAttribute("codMatriz"));
        String tipoPunt = (String)request.getSession(false).getAttribute("tipoPunt");
        if(tipoPunt==null)
            tipoPunt="0";
        if(form.getCodMatriz().equals("1")&&chksMatrices!=null)
            listaMatrices = Util.arrayToString(chksMatrices,",");
        listPuntos = servicioHermetic.buscarPunto(desPunto, form.getCliente(), form.getCodSucuHtb(),listaMatrices,tipoPunt);
        listPuntos = Util.setChksSession(chksPunto,listPuntos);
        form.setListPuntos(listPuntos);
        if(desPunto.equals(""))
            request.getSession(false).setAttribute("listPuntos",listPuntos);
        //model.put("listSucursales",listSucursales);
        form.setTipo("clie_agen");
        model.put("listPuntos",listPuntos);
        model.put(FORM_KEY,form);
        return FORM_SELECT_PUNTO;
    }
    
  @RequestMapping(params={"accion=buscarPuntoRequi","desPunto"}) 
  protected String buscarPuntoRequi(@RequestParam("desPunto") String desPunto ,ModelMap model,HttpServletRequest request)throws Exception{
      logger.info(this.getClass().toString()+" "+"metodo: GET");
      SelecPuntoForm form = new SelecPuntoForm();
      form.setCliente((String)request.getSession(false).getAttribute("cliente"));        
      form.setCodSucuHtb((String)request.getSession(false).getAttribute("sucursal"));
      String listaSucu = "";
      String[] chksSucu = (String[])request.getSession(false).getAttribute("chksSucu");
      if(("1").equals(form.getCodSucuHtb())){
          if(chksSucu==null)
              chksSucu = new String[]{"null"};
          listaSucu = Util.arrayToString(chksSucu,",");
      }
      List listPuntos = new ArrayList();        
      listPuntos = responsablesService.selecPuntoRespEqui(desPunto, form.getCliente(), listaSucu); 
              
      String[] chksPunto = (String[])request.getSession(false).getAttribute("chksPunto");
      listPuntos = Util.setChksSession(chksPunto, listPuntos);                
      form.setListPuntos(listPuntos);
      request.getSession(false).setAttribute("listPuntos",listPuntos);
      //model.put("listSucursales",listSucursales);
      form.setTipo("resp_equi");
      model.put("listPuntos",listPuntos);
      model.put(FORM_KEY,form);
      return FORM_SELECT_PUNTO;
      
  }
    
    @RequestMapping(params={"accion=searchDesPunto"}) 
    protected @ResponseBody String[] searchDesPunto(HttpServletRequest request)throws Exception{        
        logger.info(this.getClass().toString()+" "+"metodo: searchDesPunto");        
        List listModulos = (List)request.getSession(false).getAttribute("listPuntos");
        String[] arrayModulos = new String[listModulos.size()];
        for(int i=0;i<listModulos.size();i++){
            PuntoBean pBean=(PuntoBean)listModulos.get(i);
            if (pBean.getBancDesc()==null || pBean.getBancDesc().trim().equals(""))
                arrayModulos[i] = pBean.getDesPunto();
            else
                arrayModulos[i] = pBean.getBancDesc();
        }
        return arrayModulos;
    }
    
    @RequestMapping(params={"accion=selectCodPunto","codPunto"}) 
    protected @ResponseBody String[] selectCodPunto(@RequestParam("codPunto") String codPunto,@ModelAttribute(FORM_KEY) SelecPuntoForm form,HttpServletRequest request)throws Exception{        
        logger.info(this.getClass().toString()+" "+"metodo: selectCodPunto");        
        String[] chksPunto = (String[])request.getSession(false).getAttribute("chksPunto");
        if(("").equals(codPunto))
            return chksPunto; 
        if(chksPunto!=null)
            for(int i=0;i<chksPunto.length;i++){                
                if(chksPunto[i]!=null&&chksPunto[i].equals(codPunto)){
                    break;
                }
                if(chksPunto[i]==null){
                    chksPunto[i] = codPunto;
                    break;
                }
            }            
        else{
            chksPunto= new String[1000];
            chksPunto[0]=codPunto;
        }        
        request.getSession(false).setAttribute("chksPunto",chksPunto);        
        return chksPunto;
    }
    
    @RequestMapping(params={"accion=deselectCodPunto","codPunto"}) 
    protected @ResponseBody String[] deselectCodPunto(@RequestParam("codPunto") String codPunto,@ModelAttribute(FORM_KEY) SelecPuntoForm form,HttpServletRequest request)throws Exception{        
        logger.info(this.getClass().toString()+" "+"metodo: deselectCodPunto");        
        String[] chksPunto = (String[])request.getSession(false).getAttribute("chksPunto");

        if(chksPunto!=null && chksPunto.length > 0)
            for(int i=0;i<chksPunto.length;i++){                
                if(chksPunto[i]!=null && chksPunto[i].equals(codPunto)){
                    chksPunto[i] = null;
                    break;
                }
            }            
        
        request.getSession(false).setAttribute("chksPunto",chksPunto);        
        return chksPunto;
    }        
    
    @RequestMapping(params={"accion=seleccionarPuntos"})
    protected void seleccionarPuntos(ModelMap model,@ModelAttribute(FORM_KEY) SelecPuntoForm form,HttpServletRequest request)throws Exception{
        logger.info("seleccionarPuntos");
        String[] _chk = request.getParameterValues("_chk");
        request.getSession(false).setAttribute("_chk",_chk);
    } 

    @RequestMapping(params={"accion=selectTodos","codTodos"}) 
    protected String selectTodos(@RequestParam("codTodos") boolean codTodos ,ModelMap model,HttpServletRequest request)throws Exception{
        logger.info(this.getClass().toString()+" "+"metodo: GET");
        SelecPuntoForm form = new SelecPuntoForm();
        
        //Asigno el check a todos los elenmentos de la lista Cuenta        
        List listPuntos = (List)request.getSession(false).getAttribute("listPuntos");
        listPuntos = Util.setChksTodos(codTodos, listPuntos);        
        form.setListPuntos(listPuntos);
        
        //Subo a session los todos los Checks Cuenta
        if (codTodos) {
            String[] chksPunto = Util.listToStringArray(listPuntos);
            request.getSession(false).setAttribute("chksPunto",chksPunto);       
        }else {
            request.getSession(false).setAttribute("chksPunto",null);        
        }
        
        request.getSession(false).setAttribute("listPuntos",listPuntos);
        model.put("listPuntos",listPuntos);
        model.put(FORM_KEY,form);
        return FORM_SELECT_PUNTO;
    }
    
  @RequestMapping(params={"accion=selecPuntoRespEqui","codSucu"})   
  protected String selecPuntoRespEqui(@RequestParam("codSucu")String codSucuHTB,ModelMap model,HttpServletRequest request)throws Exception{
    try {
        logger.info(this.getClass().toString()+" "+"metodo: GET");
        SelecPuntoForm form = new SelecPuntoForm();
        form.setCliente((String)request.getSession(false).getAttribute("cliente"));
        String listaSucu = "";
        String[] chksSucu = (String[])request.getSession(false).getAttribute("chksSucu");
        if(("1").equals(codSucuHTB)){
            if(chksSucu==null)
                chksSucu = new String[]{"null"};
            listaSucu = Util.arrayToString(chksSucu,",");
        }
        List listPuntos = new ArrayList();        
        listPuntos = responsablesService.selecPuntoRespEqui("", form.getCliente(), listaSucu); 
                
        String[] chksPunto = (String[])request.getSession(false).getAttribute("chksPunto");
        listPuntos = Util.setChksSession(chksPunto, listPuntos);                
        form.setListPuntos(listPuntos);
        request.getSession(false).setAttribute("listPuntos",listPuntos);
        //model.put("listSucursales",listSucursales);
        form.setTipo("resp_equi");
        model.put("listPuntos",listPuntos);
        model.put(FORM_KEY,form);
        return FORM_SELECT_PUNTO;
    }
    catch (Exception e) {
        logger.error(e);
        return FORM_ERROR_POPUP_VIEW;
    }
  }
  
}
